from rest_framework import serializers

from meituan.models import Merchant,Goods,GoodsCategory


class MerchantSerializer(serializers.ModelSerializer):
    class Meta:
        model = Merchant
        fields = "__all__"

class GoodsSerializer(serializers.ModelSerializer):
    class Meta:
        model = Goods
        fields = "__all__"
'''
    {
        "id": 210,
        "name": "桶",
        "merchant": 31
    },
    要求 获取到 商家的完整信息
'''
class GoodsCategorySerializer(serializers.ModelSerializer):
    merchant = MerchantSerializer(read_only=True)  ## 用于返回商家的信息
    merchant_id = serializers.IntegerField(write_only=True)  ## 用于 POST 请求新增 商家的商品分类
    goods_list = GoodsSerializer(many=True, read_only=True)
    class Meta:
        model = GoodsCategory
        fields = "__all__"

    ### 在保存分类的时候验证 商家的ID 是否存在
    ### zai DRF 中 字段的验证方法的参数 是 value 因为框架回 自动将字段的值传递给 validate_<field_name>
    ### 对于vaild_merchant_id ,value  就是 merchant_id
    def vaild_merchant_id(self, value):
        if not Merchant.objects.filter(pk=value).exists():
            raise serializers.ValidationError("商家不存在")
            print("============商家不存在")
        return value

    ##创建商品分类
    def create(self, validated_data):
        merchant_id = validated_data.get("merchant_id")

        ## filter.first() 换回的是一个空集合
        # 使用 filter 来避免 DoesNotExist 异常
        merchant = Merchant.objects.filter(pk=merchant_id).first()  # 使用 first() 获取匹配的商家，若没有则返回 None

        # 如果没有找到商家，抛出自定义验证错误
        if not merchant:
            raise serializers.ValidationError("商家不存在")
        '''
        merchant=merchant 将已经查询到的商家对象与新创建的 GoodCategory 记录关联
        merchant 字段 是 GoodsCategory 模型中的一个 FK 用于与 Merchant 建立一对多的关系
        GoodsCategory.objects.create() Django 会创建一个新的 GoodsCategory 记录 并将 merchant 字段的值设置为对应的商家实例
        '''
        category = GoodsCategory.objects.create(**validated_data,merchant=merchant)
        return category
